﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Lista_dwukierunkowa
{
    public class DoubleLinkedList
    {
        private Queue<int> kolejka;

        public DoubleLinkedList()
        {
            kolejka = new Queue<int>();
        }

        public DoubleLinkedList(int i)
        {
            kolejka = new Queue<int>();
            kolejka.Enqueue(i);
        }

        public void addElement(int val)
        {
            kolejka.Enqueue(val);
        }

        public void removeLast()
        {
            List<int> lista = kolejka.ToList();
            kolejka.Clear();

            for (int i = lista.Count - 2; i >= 0; i--)
            {
                kolejka.Enqueue(lista.ElementAt(i));
            }   
        }

        public void displayElements()
        {
            foreach (int item in kolejka)
            {
                Console.WriteLine(item.ToString());
            }
        }

        public void displayElement(int nrOfElement)
        {
            Console.WriteLine(kolejka.ElementAt(nrOfElement));
        }

        public void zamienMiejscami()
        {
            List<int> lista = kolejka.ToList();
            kolejka.Clear();

            for (int i = lista.Count-1; i >=0; i--)
            {
                kolejka.Enqueue(lista.ElementAt(i));
            }
        }

        public void sortuj()
        {
            int[] tab = new int[kolejka.Count];
            kolejka.CopyTo(tab, 0);
            bubbleSort(tab);
            kolejka.Clear();

            for (int i = 0; i < tab.Length; i++)
            {
                kolejka.Enqueue(tab[i]);
            }
            
        }

        public static void bubbleSort(int[] a)
        {
            int n = a.Length;
            for (int i = 1; i < n; ++i)
                for (int j = n - 1; j >= i; j--)
                    if (a[j - 1].CompareTo(a[j]) > 0)
                    {
                        int x = a[j - 1];
                        a[j - 1] = a[j];
                        a[j] = x;
                    }
        }

         public bool czyIstnieje(int liczba) 
         {
             foreach (int element in kolejka)
             {
                 if (element == liczba)
                 {
                     return true;
                 }
             }
             return false;
         }

         public void usunElement(int nrElementu)
         {
             List<int> lista = kolejka.ToList();
             lista.Remove(nrElementu);
             kolejka.Clear();

             for (int i = 0; i < lista.Count; i++)
             {
                 kolejka.Enqueue(lista.ElementAt(i));
             }
         }
    }
}
